/**
 * 真题描述： 给定一个整数数组 nums 和一个目标值 target，
 * 请你在该数组中找出和为目标值的那 两个 整数，并返回他们的数组下标。
 */
const nums = [2, 7, 11, 15], target = 18;

// 暴力解法
function getTarget (arr, target) {
  const length = arr.length
  for(let i = 0; i < length; i++) {
    for (let j = i + 1; j < length; j++) {
      if(arr[i] + arr[j] === target)  {
        return [i, j]
      }
    }
  }
  return '不满足条件'
}

// Map 做差查表法
/**
 * 计算结果与当前的这个数字的差，并将差 和当前的下标保存在map中 差为键 下标为值
 *
 * 
 */
function getTargetByMap (arr, target) {
  const map = new Map()
  for(let i = 0; i<arr.length; i++) {
    // 判断当前的值 是否已经在表里存在 如果存在则直接返回
    const item = arr[i]
    const diffs = map.get(item)
    if(diffs !== undefined) {
      // 如果查到有值则返回当前下标
      return [diffs, i]
    }
    map.set(target - item, i)
  }
  return '无符合条件值'

}

console.log(getTargetByMap(nums, target))